package com.qf.utils;

import cn.hutool.jwt.JWT;

import java.util.Date;

public class JwtUtils {

    public static final String JWT_SECRET = "qfsy2304";

    public static final String JWT_SIGNER = "FUXI";


    /**
     * 校验token
     * @param token
     * @return
     */
    public static boolean checkToken(String token){

        //1. 创建jwt对象
        JWT jwt = JWT.of(token);

        //2. 设置密钥
        jwt.setKey(JWT_SECRET.getBytes());

        //3. 校验token
        return jwt.validate(0);  // 只要token过期1秒中就算过期了

    }


    /**
     * 需要在JWT中体现如下信息
     * 1. token 是颁发给哪个用户的 ？  username
     * 2. token 的有效期？  120 分
     * 3. token 的签发人 是谁 ？  FUXI ； 颁发时间
     * 4. token 自定义字段
     * 5. token 的密钥（只有服务器端自己知道）
     * @return
     */
    public static String createToken(String username,Integer time){

        //1. 创建一个jwt对象
        JWT jwt = JWT.create();

        jwt.setSubject(username); // token颁发给哪个用户
        jwt.setIssuer(JWT_SIGNER); // token是谁颁发的
        jwt.setIssuedAt(new Date()); // token的颁发时间
        // 设置token的过期时间
        jwt.setExpiresAt(new Date(System.currentTimeMillis()+1000*60*time));
        jwt.setKey(JWT_SECRET.getBytes());// 设置密钥

        // 创建token
        String token = jwt.sign();
        return token;
    }

    public static void main(String[] args) {
        String token = createToken("班班", 120);
        System.out.println(token);
        System.out.println(checkToken(token));
        System.out.println(getUserName(token));
    }

    /**
     * 根据token获取用户名
     * @param token
     * @return
     */
    public static String getUserName(String token) {

        //1. 把token字符串转换为jwt对象
        JWT jwt = JWT.of(token);

        //2. 从jwt对象中获取信息
        String subject = (String) jwt.getPayload("sub");

        return subject;
    }
}
